import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import './extendApi'
import { getToken, clearToken } from '@/utils/token'
import store from '@/store'
import { Message } from 'element-ui'
// import { from } from 'core-js/core/array'
Vue.use(VueRouter)
// console.dir(VueRouter)

// 重写链式编程的push和replace
// 1.先将之前的push存起来
// const storage = VueRouter.prototype.push
// // 2.重写
// VueRouter.prototype.push = function (path, successCb, errorCb) {
//   // 这个this指向vueRouter实例
//   if (successCb || errorCb) {
//     storage.call(this, path, successCb, errorCb)
//   } else {
//     storage.call(this, path).catch(() => { })
//   }
// }

const router = new VueRouter({
  routes,
  scrollBehavior(to, from, savedPosition) {
    // to：从哪来
    // from：从哪去
    // savedPosition：滚动位置的对象信息，通过浏览器的 前进/后退 按钮触发时才可用
    // return 期望滚动到哪个的位置

    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  }

})
// 全局路由导航守卫
// 全局前置守卫
// router.beforeEach((to, from, next) => {
//   // to 到哪去
//   // from从哪来
//   // next通行证
//   // 1.写法1
//   next()
//   // 2.写法2
//   // 添加false中断导航，不进入路由
//   // next(false)
//   // 3.写法3
//   // 这个写法就是访问任意路由路径都会进入login，会成为一个死循环，要配合if来使用
//   // next('/login')
//   // 4.写法4
//   // 传递一个错误信息，能够被onReeor捕获
//   // next(new Error('错了'))
// })
// // 全局后置守卫，
// // 进入路由要触发
// router.afterEach((to, from) => {
//   // console.log('金利阿里')
// })
router.beforeEach(async (to, from, next) => {
  // 去交易页面的时候需要登录了才能进去
  const whiteList = ['/trade', '/pay', '/paysuccess', '/center']
  // 进行鉴权
  // 拿到本地是否有token，如果有说明用户登录过，没有的话就说明没登录过
  const token = getToken()
  if (token) {
    // 查看vuex里面是否有数据
    const isVuex = store.state.user.userInfo.id
    if (isVuex) {
      // 数据存在vuex里说明页面未刷新且已登录
      next()
    } else {
      // 数据不存在说明已刷新页面，或者第一次登录
      // 请求数据
      store.dispatch('user/getUser').then(res => {
        // 请求成功
        next()
      }).catch(() => {
        // 请求失败
        // 重新登录和清空本地的token
        clearToken()
        next('/login')
      })
    }
  } else {
    if (whiteList.includes(to.path)) {
      Message.warning('请先登录')
      // 去的是这个页面，需要先登录再去
      next('/login')
    } else {
      next()
    }
  }
})
export default router
